'use strict';

const { Controller } = require('egg');
const fs = require('fs');
const path = require('path');

class ZucheController extends Controller {
	async index() {
		const { ctx } = this;
		ctx.body = '访问了登录路由';
	}

	//验证码路由
	async code() {
		const { ctx } = this;
		console.log('后端接收的验证码', this.ctx.request.body);
		// clink = this.ctx.body;
		let mycode = Math.floor(Math.random() * 1000000)
			.toString()
			.padStart(6, 0);

		if (1 == 1) {
			//为了注册能拿到验证码 存在客户端上
			ctx.session.code = mycode;
			setTimeout(() => {
				ctx.session.code = null;
			}, 5 * 60 * 1000);
			ctx.body = {
				mycode: mycode,
				code: 1,
				data: '验证码发送成功',
			};
		} else {
			ctx.body = {
				code: -1,
				data: '验证码发送失败',
			};
		}
		// ctx.body = { code: mycode };
	}

	//注册路由接口
	async register() {
		const { ctx } = this;
		let clientData = ctx.request.body;
		console.log('注册传递给后端的数据', clientData);
		//判断验证码是否正确
		if (clientData.code == ctx.session.code) {
			//操作数据库
			const results = await this.app.mysql.select('user', {
				// 搜索 user 表
				where: { tel: clientData.tel }, // WHERE 条件
			});
			//注册路由的register
			// console.log(clientData.tel);
			// console.log(clientData.password);
			console.log(results, '查找出来的数据');
			console.log(results.length, '查找出来的数据长度');

			if (results.length == 0) {
				//如果没有数据就把账号添加进入数据库
				const result = await this.app.mysql.insert('user', {
					tel: clientData.tel,
					pwd: clientData.password,
					nickname: clientData.nickname,
					gender: clientData.gather,
				});

				// 注册成功就登录
				ctx.session.uid = result.insertId;
				ctx.body = {
					code: 1,
					uid: result.insertId,
					data: '注册成功',
				};
			} else {
				//长度不为0证明tel已经存在
				ctx.body = {
					code: -1,
					data: '该账号已经注册过了 ',
				};
			}
		} else {
			ctx.body = {
				code: -3,
				data: '验证码错误',
			};
		}
	}

	//登录路由接口
	async login() {
		const { ctx } = this;
		let clientData = ctx.request.body;
		console.log(clientData);
		const results = await this.app.mysql.select('user', {
			// 搜索 user 表
			// WHERE 条件
			where: {
				tel: clientData.tel,
				pwd: clientData.password,
			},

			// // 和接口文档一一对应
			// columns: ['uid', 'username', 'headurl', 'sex'], // 要查询的表字段
		});
		console.log(results);
		if (results.length == 0) {
			ctx.body = {
				code: -1,
				data: '账号或者密码错误',
			};
		} else {
			//登录成功后端应该把uid存储起来
			ctx.session.uid = results[0].uid;
			ctx.body = {
				code: 1,
				data: '登录成功',
				setuid: results[0],
			};
		}
	}

	//首页路由接口
	async shouye() {
		const { ctx } = this;
		const results = await this.app.mysql.select('shouye', {
			where: {},
			// columns: ['uid', 'username', 'headurl', 'sex'], // 要查询的表字段
		});
		ctx.body = results;
	}

	// 图片上传
	async getimg() {
		const { ctx } = this;
		//这里注意files 是文件类型
		let clientData = ctx.request.files;
		console.log(clientData);
		let formerimg = this.ctx.request.files[0].filepath;
		// let formerimg = this.ctx.request.files[0].filepath;
		// for (let i = 0; i < array.length; i++) {
		// 	const element = array[i];
		// }

		// let formerimg = this.ctx.request.files[0].filepath;
		let imgname = path.basename(formerimg);
		// 注意最后加斜杠
		let newimg = __dirname + '/../public/upimg/' + imgname;
		//拿到新的图片并且存在public静态文件的upimg中
		//获取图片 然后再移动到puclic文件的upimg中
		//移动文件的两种方法 剪切fs.rename函数来移动文件 不能跨盘
		//移动文件的两种方法 剪切fs.copyFile函数来拷贝文件
		//fs.rename(oldPath, newPath[, callback])函数来移动文件 这个函数将把oldPath位置的文件移动到newPath位置 并更改文件的名称 没有制动创建
		fs.renameSync(formerimg, newimg);

		ctx.body = {
			code: 1,
			data: '上传成功',
			url: `/public/upimg/` + imgname,
		};
	}

	//画板上传路由接口
	async huaban() {
		const { ctx } = this;
		let set = this.ctx.request.body;
		console.log(set);
		console.log(666);
		const result = await this.app.mysql.insert('b_img', {
			describe: set.describe,
			label: set.label,
			hint: set.hint,
			drawingBoard: set.drawingBoard,
			sort: set.sort,
			myimg: set.myimg,
		});

		ctx.body = {
			code: '1',
			data: '上传成功',
		};
	}
}

module.exports = ZucheController;
